/**
#### 
方法重写OVERRIDING METHOD
在java中，子类可继承父类中的方法，而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法
而是想做一定的修改，这就需要采用方法的重写。方法重写又称方法覆盖。
在子类和父类中，重写方法后，在调用时，以创建的对象类型为准，会调用谁的方法。

#### 
关于方法重写的一些特征：
1.发生在子父类中，方法重写的两个方法返回值，方法名，参数列表必须完全一致(子类重写父类的方法)
2.子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常）
3.子类方法的访问级别不能低于父类相应方法的访问级别（子类访问级别不能低于父类访问级别）
4.父类中的方法若使用private,static,final任意修饰符修饰，那么，不能被子类重写

####
super
1.使用super调用父类中的属性，可以从父类实例处获得信息。
2.使用super调用父类中的方法，可以委托父类对象帮助完成某件事情。
3.使用super调用父类中的构造方法（super（实参）形式），必须在子类构造方法的第一条语句，调用父类中相应的
构造方法，若不显示的写出来，默认调用父类的无参构造方法，比如：super();
#### 

为什么要重写方法？或者方法重写的目的是什么？
若子类从父类中继承过来的方法，不能满足子类特有的需求时，子类就需要重写父类中相应的方法，方法的重写
也是程序扩展的表现。
*@author leo
*@company leo's company
*@description java_study
2024年2月6日下午5:42:46
Administrator
 */

/*
package com.leo.第五章_面向对象下;
public class U5_L4_L5_继承方法重写_super使用 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal animal=new Animal("恐龙");
		Dog dog=new Dog("哈士奇");
		Guest guest=new Guest();
		animal.eat(guest);
		dog.eat(guest,animal);
		dog.eat(guest,animal);
	}
}

class Animal{
	protected String name;	
	protected Guest guest;
	public Animal() {
		name="animal";
	}
	public Animal(String name) {
		this.name=name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String eat(Guest guest) {
		String warp_guest=guest.getname();
		System.out.println(name+"陪着"+warp_guest+"吃必胜客。");
	
	return warp_guest;
	}

}

class Dog extends Animal{
	private String name;
	static int count=2;
	public Dog() {}
	public Dog(String name) {		
		this.name=name;
	}
	public String eat(Guest guest,Animal animal) {
		Animal [] random_name= {this,animal};
		Animal vo=count%2==0?random_name[0]:random_name[1];
		String warp_guest="new "+guest.getname();
		System.out.println(vo.name+"带着"+this.getName()+"陪着"+warp_guest+"吃肯德基");
		count++;
		return warp_guest;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

class Guest{
	private String name;
	private static int count=2;
	public Guest() {}
	public Guest(String name) {
		this.name=name;
	}
	private String random_name() {
		String [] random_name= {"guest_male","guest_female"};	 	
		String res=count%2==0?random_name[0]:random_name[1];		
		name=res;
		count++;
		return name;
	}
	public String getname() {
		random_name();
		return name;
	}	
}
*/


